/**
 * 给定一个n个元素有序的（升序）整型数组nums 和一个目标值target ，写一个函数搜索nums中的 target，如果目标值存在返回下标，否则返回 -1。
 * 二分查找
 * 在升序数组 {nums}nums 中寻找目标值 {target}target，对于特定下标 ii，比较 {nums}[i]nums[i] 和 {target}target 的大小：
 *
 * 如果 {nums}[i] = {target}nums[i]=target，则下标 ii 即为要寻找的下标；
 *
 * 如果 {nums}[i] > {target}nums[i]>target，则 {target}target 只可能在下标 ii 的左侧；
 *
 * 如果 {nums}[i] < {target}nums[i]<target，则 {target}target 只可能在下标 ii 的右侧。
 */
public class Solution {
    public static void main(String[] args) {
        int[] nums = new int[]{-1,0,3,5,9,12};
        System.out.println(search(nums,-2));
    }

    public static int search(int[] nums, int target) {
        return searchNew(nums,0, nums.length, target);
    }

    public static int searchNew(int[] nums,int start,int end,int target){
        int mid = 0;

        mid = (start + end) /2;

        if(mid >= end || mid < start){
            return -1;
        }

        if(nums[mid] == target){
            return mid;
        }

        if(target < nums[mid]){
            return searchNew(nums,start,mid,target);
        }

        if( target > nums[mid]){
            return searchNew(nums,mid+1,end,target);
        }

        return -1;
    }
}
